package com.burgess.app;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;

public class MainFrame implements ActionListener {
    JFrame frame = new JFrame("数据模板");// 框架布局
    JTabbedPane tabPane = new JTabbedPane();// 选项卡布局
    Container con = new Container();//
    JLabel savePathLabel = new JLabel("文件保存目录");
    JLabel paramsPathLabel = new JLabel("选择参数模板");
    JLabel templatePathLabel = new JLabel("选择模板文件");
    JLabel suffixLabel = new JLabel("文件后缀");

    JTextField savePathText = new JTextField();// TextField 目录的路径
    JTextField paramsText = new JTextField();// 文件的路径
    JTextField templateText = new JTextField();// 文件的路径
    JButton savePathBtn = new JButton("选择保存目录");// 选择
    JButton paramsBtn = new JButton("选择参数模板");// 选择

    JButton templateBtn = new JButton("选择模板");// 选择


    JRadioButton jb1 = new JRadioButton("ini", false);
    JRadioButton jb2 = new JRadioButton("cfg", false);
    JRadioButton jb3 = new JRadioButton("text", false);
    JRadioButton jb4 = new JRadioButton("txt", true);

    JFileChooser jfc = new JFileChooser();// 文件选择器
    JButton confirmBtn = new JButton("生成文件");//

    private String suffix = "txt";


    public MainFrame() {
        init();

    }


    private void init() {

        jfc.setCurrentDirectory(new File("d://"));// 文件选择器的初始目录定为d盘

        double lx = Toolkit.getDefaultToolkit().getScreenSize().getWidth();

        double ly = Toolkit.getDefaultToolkit().getScreenSize().getHeight();

        ButtonGroup group = new ButtonGroup();// 定义一个按钮组
        group.add(this.jb1);// 将单选按钮组加入到一个组
        group.add(this.jb2);// 将单选按钮组加入到一个组
        group.add(this.jb3);// 将单选按钮组加入到一个组
        group.add(this.jb4);// 将单选按钮组加入到一个组

        frame.setLocation(new Point((int) (lx / 2) - 150, (int) (ly / 2) - 150));// 设定窗口出现位置
        frame.setSize(480, 380);// 设定窗口大小
        frame.setContentPane(tabPane);// 设置布局
        savePathLabel.setBounds(10, 10, 120, 20);
        savePathText.setBounds(100, 10, 200, 20);
        savePathBtn.setBounds(300, 10, 120, 20);
        savePathBtn.addActionListener(this); // 添加事件处理


        paramsPathLabel.setBounds(10, 35, 120, 20);
        paramsText.setBounds(100, 35, 200, 20);
        paramsBtn.setBounds(300, 35, 120, 20);


        templatePathLabel.setBounds(10, 60, 120, 20);
        templateText.setBounds(100, 60, 200, 20);
        templateBtn.setBounds(300, 60, 120, 20);

        suffixLabel.setBounds(10, 85, 120, 20);
        jb1.setBounds(100, 85, 50, 20);
        jb2.setBounds(150, 85, 50, 20);
        jb3.setBounds(200, 85, 60, 20);
        jb4.setBounds(260, 85, 50, 20);


        confirmBtn.setBounds(300, 120, 120, 20);

        paramsBtn.addActionListener(this); // 添加事件处理
        confirmBtn.addActionListener(this); // 添加事件处理
        templateBtn.addActionListener(this);

        jb1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                suffix = jb1.getText();
            }
        });
        jb2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                suffix = jb2.getText();
            }
        });
        jb3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                suffix = jb3.getText();
            }
        });
        jb4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                suffix = jb4.getText();
            }
        });


        con.add(savePathLabel);
        con.add(savePathText);
        con.add(savePathBtn);
        con.add(paramsPathLabel);
        con.add(paramsText);
        con.add(paramsBtn);
        con.add(confirmBtn);
        con.add(templatePathLabel);
        con.add(templateText);
        con.add(templateBtn);

        con.add(this.jb1);
        con.add(this.jb2);
        con.add(this.jb3);
        con.add(this.jb4);
        con.add(suffixLabel);

        frame.setVisible(true);// 窗口可见
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 使能关闭窗口，结束程序
        tabPane.add("面板", con);// 添加布局1
    }


    public static void main(String[] args) {

        new MainFrame();
    }


    /**
     * 事件监听的方法
     */
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if (e.getSource().equals(savePathBtn)) {// 判断触发方法的按钮是哪个
            jfc.setFileSelectionMode(1);// 设定只能选择到文件夹
            int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句
            if (state == 1) {
                return;
            } else {
                File f = jfc.getSelectedFile();// f为选择到的目录
                savePathText.setText(f.getAbsolutePath());
            }
        }
        // 绑定到选择文件，先择文件事件
        if (e.getSource().equals(paramsBtn)) {
            jfc.setFileSelectionMode(0);// 设定只能选择到文件
            int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句
            if (state == 1) {
                return;// 撤销则返回
            } else {
                File f = jfc.getSelectedFile();// f为选择到的文件
                paramsText.setText(f.getAbsolutePath());
            }
        }

        if (e.getSource().equals(templateBtn)) {
            jfc.setFileSelectionMode(0);// 设定只能选择到文件
            int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句
            if (state == 1) {
                return;// 撤销则返回
            } else {
                File f = jfc.getSelectedFile();// f为选择到的文件
                templateText.setText(f.getAbsolutePath());
            }
        }

        if (e.getSource().equals(confirmBtn)) {

            String paramsPath=paramsText.getText();
            String templatePath=templateText.getText();
            String savePath=  savePathText.getText();
            if(savePath==null||savePath.equals("")){
                JOptionPane.showMessageDialog(null, "请选择文件保存目录", "提示", 2);
                return;
            }
            if(paramsPath==null||paramsPath.equals("")){
                JOptionPane.showMessageDialog(null, "请选择模板参数文件", "提示", 2);
                return;
            }

            if(templatePath==null||templatePath.equals("")){
                JOptionPane.showMessageDialog(null, "请选择模板", "提示", 2);
                return;

            }

            java.util.List<TemplateBean> templateBeans = CvsHelper.read(paramsPath);

            List<String> txtData = TextHelper.readTextTemplate(templatePath);
            TextHelper.createDir(savePath);

            for (TemplateBean template : templateBeans) {
                String strContext = "";
                for (String txt : txtData) {
                    if (txt.endsWith("%A")) {
                        strContext += txt.replace("%A", template.getDeviceName()) + "\n";
                    } else if (txt.endsWith("%B")) {
                        strContext += txt.replace("%B", template.getUserName()) + "\n";
                    } else if (txt.endsWith("%C")) {
                        strContext += txt.replace("%C", template.getPassWord()) + "\n";
                    } else if (txt.endsWith("%D")) {
                        strContext += txt.replace("%D", template.getIdNumber()) + "\n";
                    } else if (txt.endsWith("%E")) {
                        strContext += txt.replace("%E", template.getIpAddress()) + "\n";
                    } else if (txt.endsWith("%F")) {
                        strContext += txt.replace("%F", template.getNetMask()) + "\n";
                    } else if (txt.endsWith("%G")) {
                        strContext += txt.replace("%G", template.getGateway()) + "\n";
                    }

                }

                TextHelper.createFile(savePath+"/" + template.getDeviceName() + "." + suffix, strContext);

            }


        }
    }


    protected void quit() {
        System.exit(0);    //退出系统
    }
}
